/**
 * dog.js 和 dogBark.js - 实现Dog类继承EventEmitter
 * 任务要求：
 * 1. 创建 dog.js dogBark.js 两个文件 (此处为 1.js)
 * 2. 定义一个 Dog 的构造函数,继承 EventEmitter 构造函数
 * 3. Dog 构造函数实例化的对象,包含:name 和 energy 两个属性。实例化时给定 name 和 energy
 * 4. 实例化的 dog 每隔1秒,输出一次bark!!并且 energy 减1. 当energy为0时,狗不再叫,即不再输出 bark!!
 */

const EventEmitter = require('events');

// 任务2：定义一个 Dog 的构造函数,继承 EventEmitter 构造函数
class Dog extends EventEmitter {
    constructor(name, energy) {
        super();
        // 任务3：包含 name 和 energy 两个属性
        this.name = name;
        this.energy = energy;
        this.barkTimer = null;
    }

    // 开始叫的方法
    startBarking() {
        if (this.energy <= 0) {
            return;
        }

        // 任务4：每隔1秒输出一次bark!!并且 energy 减1
        this.barkTimer = setInterval(() => {
            if (this.energy > 0) {
                console.log(`${this.name} barked! energy: ${this.energy}`);
                this.energy--;
                
                // 当energy为0时,狗不再叫
                if (this.energy === 0) {
                    this.stopBarking();
                }
            }
        }, 1000);
    }

    // 停止叫的方法
    stopBarking() {
        if (this.barkTimer) {
            clearInterval(this.barkTimer);
            this.barkTimer = null;
        }
    }
}

// 创建两个Dog实例
const taidi = new Dog('taidi', 5);
const zangao = new Dog('zangao', 9);

// 开始让两只狗叫
taidi.startBarking();
zangao.startBarking();

// 程序运行一段时间后自动退出（可选）
setTimeout(() => {
    console.log('程序结束');
    process.exit(0);
}, 15000); // 15秒后退出
